package com.edu.controller;
/*
 * @Author:princess
 * @Date 2023/11/22 11 22 18:54
 *
 */

import com.edu.bean.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.validation.Valid;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Controller
public class UserController {
    @RequestMapping("/userTest")
    public String getUser(User user){
        System.out.println(user);
        return "index.jsp";
    }

    @RequestMapping("/user")
    public String getUser2(User user){
        System.out.println(user);
        return "index.jsp";
    }

    @RequestMapping("/users")
    public String getUser3(@Valid User user, Model model){
        System.out.println(user);
        model.addAttribute("user",user);
        return "showUser.jsp";
    }

    /**
     * 使用原始的表单form进行数据校验和错误信息提示
     * 需要我们在Controller里面自己添加错误信息
     * @param user
     * @param errors
     * @param model
     * @return
     */
    @RequestMapping("/register")
    public String register(@Valid User user, BindingResult errors,Model model){
        Map map = new HashMap<>();
        if (errors.hasErrors()){//判断是否通过检验
            List<FieldError> fieldErrors = errors.getFieldErrors();//获取所有错误信息的集合（一条错误信息 会被封装在一个 FiledError对象）
            for (FieldError fieldError : fieldErrors) {
                String key = fieldError.getField();//获取哪一个属性校验未通过
                String value = fieldError.getDefaultMessage();//获取相关的错误信息
                map.put(key,value);
                model.addAttribute("errors",map);//把所有的错误信息放入model
            }
            return "user.jsp";
        }
        return "showUser.jsp";
    }

    @RequestMapping("/add")
    public String toRegister(Model model){
        User user = new User();
        model.addAttribute("user",user);
        return "register.jsp";
    }

    /**
     * 使用spring标签库来进行数据校验和错误信息提示
     * @param user
     * @param errors
     * @return
     */
    @RequestMapping("/reg")
    public String reg(@Valid User user, BindingResult errors){
        if (errors.hasErrors()){
            return "register.jsp";
        }
        return "showUser.jsp";
    }
}
